#include "common.hpp"
#include "en.hpp"


/*
int main()
{
    // create the window
    sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
    sf::CircleShape  circle;
    sf::View view;
	view.setCenter(0,0);
	view.setSize(800, 600);
    circle.setRadius(30);
    circle.setPosition(-30,-30);

	view.setCenter(0,0);
	window.setView(view);

    // run the program as long as the window is open
    while (window.isOpen())
    {
        // check all the window's events that were triggered since the last iteration of the loop
        sf::Event event;
        while (window.pollEvent(event))
        {
            // "close requested" event: we close the window
            if (event.type == sf::Event::Closed)
                window.close();
        }

        // clear the window with black color
        window.clear(sf::Color::Black);

        // draw everything here...
        window.draw(circle);

        // end the current frame
        window.display();
    }

    return 0;
}
*/
/*
int main()
{
//	int fps = 0;
//	int fpsout = 0;
//	int i = 0;

//	sf::Clock clock;
//	sf::Image capture;

	phys::globTime = 0;
	std::shared_ptr<starSystem>   sysPtr = en::createStarSystem();
	std::shared_ptr<basePosition> sunPtr = en::createBasePosition();
	std::shared_ptr<baseOrbit>  earthPtr = en::createBaseOrbit();
	std::shared_ptr<baseOrbit>   moonPtr = en::createBaseOrbit();

	sunPtr->setPosX(0);
	sunPtr->setPosY(0);
	sunPtr->setMu(1.98855e30 * phys::G);
	sunPtr->setRad(696342000);
//	sunPtr->renderBody.setFillColor(sf::Color::Transparent);

	earthPtr->setMu(5.97219e24 * phys::G);
	earthPtr->setRad(6371000);
	earthPtr->setSMA(149598261000);
	earthPtr->setEcc(0.901671123);
	earthPtr->setTheta(1);
	earthPtr->setDirec(-1);
	earthPtr->setT0(2592000);
//	earthPtr->setMove(move_t::ORBIT_E);

	moonPtr->setMu(7.3477e22 * phys::G);
	moonPtr->setRad(1737100);
//	moonPtr->setSMA(384399000);
//	moonPtr->setEcc(0.0549);
	moonPtr->setSMA(104399000);
	moonPtr->setEcc(0.50549);
	moonPtr->setTheta(0);
	moonPtr->setDirec(1);
	moonPtr->renderBody.setFillColor(sf::Color::Cyan);
//	moonPtr->setMove(move_t::ORBIT_E);

	sysPtr->addChild(earthPtr);
	sysPtr->addChild(moonPtr);
	sysPtr->addChild(sunPtr);

	earthPtr->setParents(sunPtr);
	moonPtr->setParents(earthPtr);

	sysPtr->refreshDisp();
	en::tick(0);
	en::flushState();

	en::cameraFocus = moonPtr;
	en::curSystem = 0;
	en::openMap();
	std::cin.get();

	while (en::systemMap.isOpen())
	{
		std::ostringstream nameStream;
//		nameStream << i << ".png";
//		i++;

		sf::Event event;
		while (en::systemMap.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				en::systemMap.close();
		}

//		if(clock.getElapsedTime().asSeconds() > 1)
//		{
//			fpsout = fps;
//			fps = 0;
//			clock.restart();
//		}

//		en::flushState();
		en::tick(86400);
		en::snapCamera();
		en::refreshDisp();

		en::systemMap.setView(en::systemView);
		en::systemMap.clear();
		en::systemList[en::curSystem]->draw(&en::systemMap);
		en::systemMap.display();

		en::systemMap.setView(en::systemMap.getDefaultView());
		//draw ui

//		capture = en::systemMap.capture();
//		capture.saveToFile(nameStream.str());
//		fps++;
//		std::cout << fpsout << "\n";
		std::cin.get();
	}

	en::systemMap.close();
	return(0);
}
*/

int main()
{
	sf::Image capture;
	int i = 0;
	bool capFlag = false;

	phys::globTime = 0;
	std::shared_ptr<starSystem>   sysPtr = en::createStarSystem();
	std::shared_ptr<basePosition> sunPtr = en::createBasePosition();
	std::shared_ptr<baseOrbit>  earthPtr = en::createBaseOrbit();
	stvec earthState;
	earthState.px = -50000000000;
	earthState.py = -30000000000;
	earthState.vx = 13000;
	earthState.vy = 50000;
	earthState.par= sunPtr;

	sunPtr->setPosX(0);
	sunPtr->setPosY(0);
	sunPtr->setMu(1.98855e30 * phys::G);
	sunPtr->setRad(696342000);

	earthPtr->setMu(5.97219e24 * phys::G);
	earthPtr->setRad(6371000);

	sysPtr->addChild(earthPtr);
	sysPtr->addChild(sunPtr);

	earthPtr->setState(earthState);

	en::flushState();

	en::cameraFocus = sunPtr;
	en::curSystem = 0;
	en::openMap();
	std::cout << toString(earthPtr->getState());
	std::cin.get();

	earthPtr->updateOrbit();
	sysPtr->refreshDisp();

	while (en::systemMap.isOpen() && i < 100 )
	{
		std::ostringstream nameStream;
		nameStream << i << ".png";
		i++;

		sf::Event event;
		while (en::systemMap.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				en::systemMap.close();
		}


//		en::flushState();
		en::tick(0);
		en::snapCamera();
		en::refreshDisp();
		std::cout << toString(earthPtr->getState());

		en::systemMap.setView(en::systemView);
		en::systemMap.clear();
		en::systemList[en::curSystem]->draw(&en::systemMap);
		en::systemMap.display();

		en::systemMap.setView(en::systemMap.getDefaultView());
		//draw ui

		if(capFlag)
		{
			capture = en::systemMap.capture();
			capture.saveToFile(nameStream.str());
		}

//		fps++;
//		std::cout << fpsout << "\n";
		std::cin.get();
	}

	en::systemMap.close();
	return(0);
}

